{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 50 ms\n"
     ]
    }
   ],
   "source": [
    "# NumPy（Numerical Python） 是Python数值计算最重要的基础包\n",
    "# NumPy的部分功能如下：\n",
    "#     ndarray， 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。\n",
    "#     用于对整组数据进行快速运算的标准数学函数（无需编写循环） 。\n",
    "#     用于读写磁盘数据的工具以及用于操作内存映射文件的工具。\n",
    "#     线性代数、 随机数生成以及傅里叶变换功能。\n",
    "#     用于集成由C、 C++、 Fortran等语言编写的代码的A C API。\n",
    "\n",
    "# 由于NumPy提供了一个简单易用的C API， 因此很容易将数据传递给由低级语言编写的外部库\n",
    "# 外部库也能以NumPy数组的形式将数据返回给Python。\n",
    "\n",
    "# NumPy本身并没有提供多么高级的数据分析功能， \n",
    "# 理解NumPy数组以及面向数组的计算将有助于高效地使用诸如pandas之类的工具。\n",
    "\n",
    "# 最关注的功能主要集中在：\n",
    "#     用于数据整理和清理、 子集构造和过滤、 转换等快速的矢量化数组运算。\n",
    "#     常用的数组算法， 如排序、 唯一化、 集合运算等。\n",
    "#     高效的描述统计和数据聚合/摘要运算。\n",
    "#     用于异构数据集的合并/连接运算的数据对齐和关系型数据运算。\n",
    "#     将条件逻辑表述为数组表达式（而不是带有if-elif-else分支的循环） 。\n",
    "#     数据的分组运算（聚合、 转换、 函数应用等） 。 。\n",
    "\n",
    "# NumPy之于数值计算特别重要的原因之一， 可以高效处理大数组的数据。\n",
    "# 这是因为：NumPy是在一个连续的内存块中存储数据， 独立于其他Python内置对象。\n",
    "# NumPy的C语言编写的算法库可以操作内存， 而不必进行类型检查或其它前期工作。\n",
    "# 比起Python的内置序列，NumPy数组使用的内存更少。\n",
    "# NumPy可以在整个数组上执行复杂的计算， 而不需要Python的for循环。\n",
    "\n",
    "# 要搞明白具体的性能差距， 考察一个包含一百万整数的数组， 和一个等价的Python列表：\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "create_array = np.arange(1000000)\n",
    "create_list = list(range(1000000))\n",
    "\n",
    "%time for _ in range(10) : array_seq = create_array ** 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 10.3 s\n"
     ]
    }
   ],
   "source": [
    "%time for _ in range(10) : list_seq = [x ** 2 for x in create_list]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
